package cn.csc.module.product.service.stock;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.module.product.controller.admin.stock.vo.SkuStockCreateReqVO;
import cn.csc.module.product.controller.admin.stock.vo.SkuStockExportReqVO;
import cn.csc.module.product.controller.admin.stock.vo.SkuStockPageReqVO;
import cn.csc.module.product.controller.admin.stock.vo.SkuStockUpdateReqVO;
import cn.csc.module.product.convert.stock.SkuStockConvert;
import cn.csc.module.product.dal.dataobject.stock.SkuStockDO;
import cn.csc.module.product.dal.mysql.stock.SkuStockMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.math.BigInteger;
import java.util.Collection;
import java.util.List;

import static cn.csc.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.csc.module.product.enums.ErrorCodeConstants.SKU_STOCK_NOT_EXISTS;

/**
 * 库存信息 Service 实现类
 *
 * @author liuchuang
 */
@Service
@Validated
public class SkuStockServiceImpl implements SkuStockService {

    @Resource
    private SkuStockMapper skuStockMapper;

    @Override
    public BigInteger createSkuStock(SkuStockCreateReqVO createReqVO) {
        // 插入
        SkuStockDO skuStock = SkuStockConvert.INSTANCE.convert(createReqVO);
        skuStockMapper.insert(skuStock);
        // 返回
        return skuStock.getId();
    }

    @Override
    public void updateSkuStock(SkuStockUpdateReqVO updateReqVO) {
        // 校验存在
        validateSkuStockExists(updateReqVO.getId());
        // 更新
        SkuStockDO updateObj = SkuStockConvert.INSTANCE.convert(updateReqVO);
        skuStockMapper.updateById(updateObj);
    }


    @Override
    public void deleteSkuStock(BigInteger id) {
        // 校验存在
        validateSkuStockExists(id);
        // 删除
        skuStockMapper.deleteById(id);
    }

    private void validateSkuStockExists(BigInteger id) {
        if (skuStockMapper.selectById(id) == null) {
            throw exception(SKU_STOCK_NOT_EXISTS);
        }
    }

    @Override
    public SkuStockDO getSkuStock(BigInteger id) {
        return skuStockMapper.selectById(id);
    }

    @Override
    public SkuStockDO selectBySkuId(BigInteger skuId) {
        return skuStockMapper.selectBySkuId(skuId);
    }

    @Override
    public List<SkuStockDO> getSkuStockList(Collection<BigInteger> ids) {
        return skuStockMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<SkuStockDO> getSkuStockPage(SkuStockPageReqVO pageReqVO) {
        return skuStockMapper.selectPage(pageReqVO);
    }

    @Override
    public List<SkuStockDO> getSkuStockList(SkuStockExportReqVO exportReqVO) {
        return skuStockMapper.selectList(exportReqVO);
    }

}
